1. Field of the Invention
The present invention relates to a method, system, and program for managing requests to an Input/Output (I/O) device.
2. Description of the Related Art
A computer operating system or application executing in the computer communicates Input/Output (I/O) requests to a device driver program executing in the computer. The device driver interfaces with a storage controller that manages I/O requests for a storage device. For instance, the storage controller may comprise a hardware component internal or external to the storage device. For instance, the storage controller may comprise hardware implemented in a card attached to a bus of the computer to transfer I/O requests to a storage device, such as a Small Computer System Interface (SCSI) storage controller implemented on a Peripheral Component Interconnect (PCI) card in the computer. Still further, the storage controller may be implemented in hardware on the computer motherboard. The storage controller may implement any type of storage protocol known in the art, such as SCSI, Integrated Drive Electronics (IDE), Fibre Channel (FC), Serial Attached SCSI (SAS), Advanced Technology Attachment (ATA), Serial ATA (SATA), etc. The disk drives managed by the storage controller may be organized as a Redundant Array of Independent Disks (RAID), Just a Bunch of Disks (JBOD), etc.
The device driver software and storage controller hardware may each maintain a queue of I/O requests received from an application executing in the computer. The device driver queue would initially receive I/O requests and then transfer those requests to the storage controller hardware where the requests are queued until executed by the storage controller hardware. In current implementations, to maintain the flow of I/O requests to the hardware queue, the device driver would periodically detect if requests are being received in a sequential mode, which means that a series of requests are directed to sequential logical block addresses (LBAs). If the requests are being received in sequential mode, then the device driver may coalesce a fixed number of sequential I/O requests into a single coalesced I/O request that is sent to the device driver hardware to bundle multiple small sequential requests into fewer, larger sequential requests to maximize the bandwidth.